function toPage(
  path: string,
  method: 'navigateTo' | 'redirectTo' | 'switchTab' | 'reLaunch' = 'navigateTo',
) {
  if (!path) {
    showToast('功能开发中')
    return
  }
  if (!!method) {
    const navigate = uni[method] as (options: { url: string }) => void
    navigate({
      url: path,
    })
    return
  }

  uni.navigateTo({
    url: path,
  })
}

function loginToPage() {
  const pages = getCurrentPages()
  if (pages.length > 1) {
    uni.navigateBack()
  } else {
    toPage('/pages/shipping/shipping', 'switchTab')
  }
}

function loginOverdueToPage() {
  // 如果当前页面不是登录页面则跳转至登录页面
  const pages = getCurrentPages()
  const curPage = pages[pages.length - 1]
  if (!curPage || curPage.route !== 'pages/login/login') {
    toPage('/pages/login/login')
  }
}

function unregisterToPage() {
  toPage('/pages/login/register', 'redirectTo')
}

function showToast(msg: string, deration: number = 1500) {
  uni.showToast({
    title: msg,
    duration: deration,
    icon: 'none',
  })
}

function showLoading(msg: string = '加载中') {
  uni.showLoading({
    title: msg,
  })
}

// 格式化时间戳
function formatTimestamp(t: number, fmt = 'yyyy-MM-dd hh:mm:ss'): string {
  if (!t) {
    return ''
  }

  let ret
  let time = new Date(t)
  const opt = {
    'y+': time.getFullYear().toString(), // 年
    'M+': (time.getMonth() + 1).toString(), // 月
    'd+': time.getDate().toString(), // 日
    'h+': time.getHours().toString(), // 时
    'm+': time.getMinutes().toString(), // 分
    's+': time.getSeconds().toString(), // 秒
    // 有其他格式化字符需求可以继续添加，必须转化成字符串
  }
  for (let k in opt) {
    const kk = k as keyof typeof opt
    ret = new RegExp('(' + kk + ')').exec(fmt)
    if (ret) {
      fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[kk] : opt[kk].padStart(ret[1].length, '0'))
    }
  }
  return fmt
}

// 格式化时间字符串
function formatDate(date: string, fmt = 'yyyy-MM-dd hh:mm:ss'): string {
  if (!date) {
    return ''
  }

  let reDate = date.replace(/\-/g, '/')
  let time = new Date(reDate)
  return formatTimestamp(time.getTime(), fmt)
}

// 时间字符串转时间戳
function DateStrToTimestamp(dateStr?: string): number {
  if (!dateStr) {
    return 0
  }

  let reDate = dateStr.replace(/\-/g, '/')

  let time = new Date(reDate)
  return time.getTime()
}

export {
  toPage, // 页面跳转
  loginToPage, // 登录成功后的页面跳转
  loginOverdueToPage, // 登录逾期的页面跳转
  unregisterToPage, // 账号未注册的页面跳转
  showToast, // 提示
  showLoading, // 等待
  formatTimestamp, // 格式化时间戳
  formatDate, // 格式化时间字符串
  DateStrToTimestamp, // 时间字符串转时间戳
}
